package evemanutool.gui.corp; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.Paint; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.TimeZone; import javax.swing.BorderFactory; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.DefaultDrawingSupplier; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; import evemanutool.data.cache.IndustryStatsEntry; import evemanutool.data.display.CorpMember; import evemanutool.gui.corp.components.CorpMemberModel; import evemanutool.gui.general.tabel.ScrollableTablePanel; import evemanutool.utils.databases.CorpApiDB; import evemanutool.utils.datahandling.GUIUpdater; @SuppressWarnings("serial") public class StatsPanel extends JPanel implements GUIUpdater { //DB:s private CorpApiDB cdb; //Internal panels. private ScrollableTablePanel<CorpMember> memberPanel; //Plot. private JFreeChart chart; private XYPlot plot; public StatsPanel(CorpApiDB cdb) { //Set DB refs. this.cdb = cdb; //Main layout. setLayout(new GridLayout(1, 2)); JPanel statsPanel = new JPanel(new BorderLayout()); //Create Industry stats chart. JPanel p1 = new JPanel(new GridLayout(1, 1)); ChartPanel chartPanel = new ChartPanel(createChart()); //Disable popup. chartPanel.setPopupMenu(null); statsPanel.add(chartPanel, BorderLayout.CENTER); p1.add(statsPanel); //Create character panel. JPanel p2 = new JPanel(new GridLayout(1, 1)); memberPanel = new ScrollableTablePanel<>(new CorpMemberModel()); memberPanel.setBorder(BorderFactory.createTitledBorder("Corp Members")); p2.add(memberPanel); //Add top level components. add(p1); add(p2); } private JFreeChart createChart() { //Create chart. chart = ChartFactory.createTimeSeriesChart( "Corporation Statistics", "Date", "ISK", new TimeSeriesCollection(TimeZone.getTimeZone("UTC")), true, true, false); //Set appearance. chart.setBackgroundPaint(getBackground()); chart.setPadding(new RectangleInsets(10, 10, 10, 10)); //Override colors. chart.getPlot().setDrawingSupplier(new DefaultDrawingSupplier( new Paint[] {Color.RED, Color.BLUE, Color.GREEN, Color.MAGENTA}, DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE)); //Set plot settings. plot = chart.getXYPlot(); plot.setBackgroundPaint(Color.WHITE); plot.setDomainGridlinePaint(Color.BLACK); plot.setRangeGridlinePaint(Color.BLACK); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(false); XYItemRenderer renderer = plot.getRenderer(); if (renderer instanceof StandardXYItemRenderer) { renderer.setSeriesStroke(0, new BasicStroke(2.0f)); renderer.setSeriesStroke(1, new BasicStroke(2.0f)); } //Formatting. DateAxis axisX = (DateAxis) plot.getDomainAxis(); axisX.setDateFormatOverride(new SimpleDateFormat("YYYY-MM-dd")); NumberAxis axisY = (NumberAxis) plot.getRangeAxis(); axisY.setNumberFormatOverride(NumberFormat.getIntegerInstance()); return chart; } private XYDataset createDataSet() { TimeSeriesCollection dataSet = new TimeSeriesCollection(TimeZone.getTimeZone("UTC")); TimeSeries s1 = new TimeSeries("Total Capital"); TimeSeries s2 = new TimeSeries("Industry Wallet"); TimeSeries s3 = new TimeSeries("Material Value"); TimeSeries s4 = new TimeSeries("Market Orders Value"); for (IndustryStatsEntry iS : cdb.getIndustryStats()) { s1.add(new Millisecond(iS.getDate()), iS.getTotalCapital()); s2.add(new Millisecond(iS.getDate()), iS.getIndustryWallet()); s3.add(new Millisecond(iS.getDate()), iS.getMaterialValue()); s4.add(new Millisecond(iS.getDate()), iS.getMarketOrdersValue()); } dataSet.addSeries(s1); dataSet.addSeries(s2); dataSet.addSeries(s3); dataSet.addSeries(s4); return dataSet; } @Override public void updateGUI(){ //Plot. plot.setDataset(createDataSet()); chart.fireChartChanged(); //Update layout. revalidate(); //Corp members. memberPanel.setData(cdb.getCorpMembers()); } }